Read-only Reentrancy Attack

Abstract

Read-only Reentrancy Attack 是 Reentrancy Attack 的升级版攻击。经典的重入攻击是通过反复调用可修改的函数 state-modifying function 实现攻击,而 Read-only 重入攻击只需利用 view function 即可完成攻击。

Principles

Vulnerability characteristics

Attack Steps

Read-only Reentrancy Attack 的主要攻击步骤如下:

  1. Attacker 找到一个「可重入合约 Reentrant contract」,且此合约有「重要数值 state」被其他的协议所使用
  2. 当 Attacker 调用 Reentrant Contract 时,执行 call 时触发攻击合约的 fallback 函数
  3. Attacker 利用 fallback 函数调用「被攻击的 DeFi 协议 target DeFi protocol
  4. 被攻击的 DeFi 协议从 Reentrant contract 中读取已被 Attacker 更改过的数据,计算出错误的结果以造成经济损失

Pasted image 20231011145913.png

Warning

注意,虽然 DeFi 协议的计算函数本身是 view 属性的,但是其使用的状态 state 是基于其他合约的,这也让攻击者有机可乘。

Incidents

Solutions

References